﻿using System.Collections.Generic;
using System.Threading.Tasks;
using Infrastructure.ExternalService.Core.Marketing;
using Infrastructure.ExternalService.Core.Requests;
using Infrastructure.ExternalService.Core.Responses;

namespace Infrastructure.ExternalService.Core
{
    public interface IMarketingExternal : IExternalService
    {
        /// <summary>
        /// 注册客户：返回userId
        /// </summary>
        /// <param name="custId"></param>
        /// <returns></returns>
        Task<RegisterCustomerResponse> RegisterCustomer(string custId);
        /// <summary>
        /// 通过客户标识,获取客户信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<CustomerProfile> GetCustomerByCustIdAsync(string custId);
        /// <summary>
        /// 通过手机号, 品牌标识获取客户信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<CustomerProfile> GetCustomerByMobileAsync(GetCustomerProfileByMobileRequest request);

        /// <summary>
        /// 通过客户UserId,获取客户信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<CustomerProfile> GetCustomerByUserIdAsync(GetCustomerProfileByUserIdRequest request);

        /// <summary>
        /// 创建线索
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<ClueResponse> CreateClueAsync(CreateClueRequest request);


        /// <summary>
        /// 根据客户标识，获取指定客户的项目列表
        /// </summary>
        /// <param name="CustId">客户Id</param>
        /// <param name="IsGetNoControlData">是否返回禁用项目 （Y-是（默认） N-否）</param>
        /// <param name="ProjectType">客户项目类型 A-全部 P-培训 E-学历</param>
        /// <returns></returns>
        Task<List<CustomerProject>> GetCustomerProjectInfo(GetCustomerProjectInfoRequest request);

        /// <summary>
        /// 根据用户标识、项目标识，新增或更新客户项目的意向为E、成单状态(订单中心调用)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<string> AddOrUpdateCustomerProjectInfoAsync(AddOrUpdateCustomerProjectRequest request);

        Task<List<CustomerProfile>> GetCustomersAsync(GetCustomersRequest request);

        Task<string> SetCustomersLabelAsync(SetCustomersLabelRequest request);
    }
}
